//
//  NHBaseTableView.h
//  LZNeiHan
//
//  Created by 梁梓烽 on 16/10/1.
//  Copyright © 2016年 liangzifeng. All rights reserved.
//

#import <UIKit/UIKit.h>


typedef NS_ENUM(NSInteger, NHBaseTableViewRowAnimation)
{
    Fade = UITableViewRowAnimationFade,
    Right = UITableViewRowAnimationRight,
    Left = UITableViewRowAnimationLeft,
    Top = UITableViewRowAnimationTop,
    Bottom = UITableViewRowAnimationBottom,
    None = UITableViewRowAnimationNone,
    Automatic = 100
};

@interface NHBaseTableView : UITableView

#pragma mark -其他

-(void)nh_updateWithUpdateBlock:(void(^)(NHBaseTableView *tableView))updateBlock;

-(UITableViewCell * )nh_cellAtIndexPath:(NSIndexPath *)indexPath;

#pragma mark -注册

/** 注册普通tableviewcell */
-(void)nh_registerCellClass:(Class)cellClass identifier:(NSString *)identifier;

/** 注册从xib中加载的一个tableviewcell */
-(void)nh_registerCellNib:(Class)cellNib identifier:(NSString *)identifier;

/** 注册一个普通的UITableViewHeaderFooterView*/

-(void)nh_registerHeaderFooterClass:(Class)headerFooterClass identifier:(NSString *)identifier;

/** xib注册一个普通的UITableViewHeaderFooterView*/
-(void)nj_registerHeaderFooter:(Class)headerFooterNib identifier:(NSString *)identifier;


#pragma mark - 只对已经存在的cell进行刷新，没有类似于系统的 如果行不存在，默认insert操作
/** 刷新单行、动画默认*/
- (void)nh_reloadSingleRowAtIndexPath:(NSIndexPath *)indexPath;

/** 刷新单行、动画默认*/
- (void)nh_reloadSingleRowAtIndexPath:(NSIndexPath *)indexPath animation:(NHBaseTableViewRowAnimation)animation;

/** 刷新多行、动画默认*/
- (void)nh_reloadRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths;

/** 刷新多行、动画默认*/
- (void)nh_reloadRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths animation:(NHBaseTableViewRowAnimation)animation;

/** 刷新某个section、动画默认*/
- (void)nh_reloadSingleSection:(NSInteger)section;

/** 刷新某个section、动画自定义*/
- (void)nh_reloadSingleSection:(NSInteger)section animation:(NHBaseTableViewRowAnimation)animation;

/** 刷新多个section、动画默认*/
- (void)nh_reloadSections:(NSArray <NSNumber *>*)sections;

/** 刷新多个section、动画自定义*/
- (void)nh_reloadSections:(NSArray <NSNumber *>*)sections animation:(NHBaseTableViewRowAnimation)animation;


#pragma mark - 对cell进行删除操作
/** 删除单行、动画默认*/
- (void)nh_deleteSingleRowAtIndexPath:(NSIndexPath *)indexPath;

/** 删除单行、动画自定义*/
- (void)nh_deleteSingleRowAtIndexPath:(NSIndexPath *)indexPath animation:(NHBaseTableViewRowAnimation)animation;

/** 删除多行、动画默认*/
- (void)nh_deleteRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths;

/** 删除多行、动画自定义*/
- (void)nh_deleteRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths animation:(NHBaseTableViewRowAnimation)animation;

/** 删除某个section、动画默认*/
- (void)nh_deleteSingleSection:(NSInteger)section;

/** 删除某个section、动画自定义*/
- (void)nh_deleteSingleSection:(NSInteger)section animation:(NHBaseTableViewRowAnimation)animation;

/** 删除多个section*/
- (void)nh_deleteSections:(NSArray <NSNumber *>*)sections;

/** 删除多个section*/
- (void)nh_deleteSections:(NSArray <NSNumber *>*)sections animation:(NHBaseTableViewRowAnimation)animation;



#pragma mark - 对cell进行插入操作
/** 增加单行 动画无*/
- (void)nh_insertSingleRowAtIndexPath:(NSIndexPath *)indexPath;

/** 增加单行，动画自定义*/
- (void)nh_insertSingleRowAtIndexPath:(NSIndexPath *)indexPath animation:(NHBaseTableViewRowAnimation)animation;

/** 增加单section，动画无*/
- (void)nh_insertSingleSection:(NSInteger)section;

/** 增加单section，动画自定义*/
- (void)nh_insertSingleSection:(NSInteger)section animation:(NHBaseTableViewRowAnimation)animation;

/** 增加多行，动画无*/
- (void)nh_insertRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths;

/** 增加多行，动画自定义*/
- (void)nh_insertRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths animation:(NHBaseTableViewRowAnimation)animation;

/** 增加多section，动画无*/
- (void)nh_insertSections:(NSArray <NSNumber *>*)sections;

/** 增加多section，动画自定义*/
- (void)nh_insertSections:(NSArray <NSNumber *>*)sections animation:(NHBaseTableViewRowAnimation)animation;

@end
